/** @format */

// @ts-ignore
import fs from 'node:fs'
// @ts-ignore
import path from 'node:path'
// @ts-ignore
import child_process from 'child_process'
// @ts-ignore
import dayjs from 'dayjs'
// @ts-ignore
import { fileURLToPath } from 'node:url'
// @ts-ignore
const __dirname = path.join(path.dirname(fileURLToPath(import.meta.url)),'../')
const laiyuPkg = fs.readFileSync(path.resolve(__dirname, 'node_modules/dayjs/package.json'), 'utf-8')
const laiyuJson = JSON.parse(laiyuPkg)
function gitINfo() {
    try {
        // git show 879b3357cb2ed06eedcd9d4084fa4df384a5b366  可以查看这个git的提交记录
        const commit = child_process.execSync('git show -s --format=%H').toString().trim()
        console.log(commit,999,laiyuJson.version)
        return {
            commit,
            buildTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
            'laiyu-ui': laiyuJson.version
        }
    } catch (e: unknown) {
        return (e as Error).message
    }
}

const version = JSON.stringify(gitINfo(), null, '\t')

export function buildVersionPlugins(){
    return {
        name:"buildVersion",
        // config(){
        //     //修改vite的配置
        // },
        // configureServer(server){
        //     //修改开发服务器的行为
        // },
        // // 服务器启动时被调用
        // buildStart(){},
        // //在每个传入模块请求时
        // resolveId(){},
        // load(){},
        // transform(src,id){},
        // buildEnd(){},
        closeBundle(){
            //file:///E:/demo/vite-document-operation/vite-plugins/build-version.ts import.meta.url
            // E:\demo\vite-document-operation\vite-plugins\build-version.ts import.meta.url
            // E:\demo\vite-document-operation\
            // console.log(import.meta.url,'import.meta.url')
            // console.log(fileURLToPath(import.meta.url),'import.meta.url')
            // console.log(__dirname)
            // 这里是打包成功，失败了只会执行buildEnd
            // 修改打包产物
            fs.writeFile(path.resolve(__dirname,'./dist','version.json'),version,err=>{
                if(err){
                    console.error(err)
                }
            })
        },
    }
}